package com.yupi.yupicturebackend.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 性能监控注解
 * 用于监控方法执行时间和性能指标
 * 
 * @author yupi
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PerformanceMonitor {

    /**
     * 监控描述
     * @return 监控描述
     */
    String value() default "";

    /**
     * 业务模块名称
     * @return 模块名称
     */
    String module() default "";

    /**
     * 慢查询阈值（毫秒）
     * 超过此阈值将记录为慢查询
     * @return 阈值时间
     */
    long slowThreshold() default 1000L;

    /**
     * 是否记录方法参数
     * @return true-记录，false-不记录
     */
    boolean recordArgs() default false;

    /**
     * 是否记录返回结果
     * @return true-记录，false-不记录
     */
    boolean recordResult() default false;

    /**
     * 是否启用内存监控
     * @return true-启用，false-不启用
     */
    boolean memoryMonitor() default false;

    /**
     * 监控级别
     * @return 监控级别
     */
    MonitorLevel level() default MonitorLevel.INFO;

    /**
     * 监控级别枚举
     */
    enum MonitorLevel {
        /**
         * 调试级别 - 记录详细信息
         */
        DEBUG,
        /**
         * 信息级别 - 记录基本信息
         */
        INFO,
        /**
         * 警告级别 - 只记录慢查询
         */
        WARN,
        /**
         * 错误级别 - 只记录异常
         */
        ERROR
    }
}
